/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controlacciones.ejb3.dao;

import controlacciones.ejb3.dao.entity.TbDatosClienteFacadeLocal;
import controlacciones.ejb3.dao.entity.TbParametrosFacadeLocal;
import controlacciones.ejb3.entity.TbAccion;
import controlacciones.ejb3.entity.TbArea;
import controlacciones.ejb3.entity.TbDatosCliente;
import controlacciones.ejb3.entity.TbParametros;
import controlacciones.ejb3.entity.TbTipoAccionClasificacionAccionArea;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.sql.DataSource;

/**
 *
 * @author Vanessa
 */
@Stateless
public class ConsultaDAOBean implements ConsultaDAOLocal {
    
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method" or "Web Service > Add Operation")

    public int getNumRegistrosCortes( ){
        int num = 1;

        try {
            String queryString = "SELECT  count(CORNROLIN)   FROM         PROGCORT";
            Query query = em.createNativeQuery(queryString);
            Object o = query.getSingleResult();
            System.out.println(o);
            String strnum = o.toString().substring(1, o.toString().length() - 1) ;
            System.out.println(strnum );
            num = Integer.parseInt( strnum);

            System.out.println( "Num de Registros: " + num );
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return num;
     }

   public int getNumRegistrosAcciones( TbArea area, String fecha){
        int num = 1;

        try {
            String queryString = "";
            queryString = "SELECT     count (tc.id_accion) " +
                    " FROM          tb_accion ta with (nolock) INNER JOIN  " +
                    " tb_cliente AS tc with (nolock) ON tc.id_accion = ta.id_accion INNER JOIN  " +
                    " tb_tipo_accion with (nolock) ON ta.cod_tipo_accion = tb_tipo_accion.cod_tipo_accion  " +
                    " WHERE     (ta.cod_area = '"+area.getCodArea()+"' )  " +
                    " and convert(char(10),ta.fecha_registro,103)  =  '"+fecha+"'";
            Query query = em.createNativeQuery(queryString);
            Object o = query.getSingleResult();
            System.out.println(o);
            String strnum = o.toString().substring(1, o.toString().length() - 1) ;
            System.out.println(strnum );
            num = Integer.parseInt( strnum);

            System.out.println( "Num de Registros: " + num );
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return num;
     }

   public int getNumRegistrosResultados( String codarea){
        int num = 1;

        try {
            String queryString = "";
            queryString = "SELECT     count(ID_RESULT) " +
                    " FROM         controlAcciones_DBF.dbo.RESUL"+codarea;

            Query query = em.createNativeQuery(queryString);
            Object o = query.getSingleResult();
            System.out.println(o);
            String strnum = o.toString().substring(1, o.toString().length() - 1) ;
            System.out.println(strnum );
            num = Integer.parseInt( strnum);

            System.out.println( "Num de Registros: " + num );
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return num;
     }

   public int getNumRegistrosLecturas( String fecha){
        int num = 1;

        try {
            String queryString = "";
            queryString = "select count(id_lectura) from tb_lectura1 " +
                    " where convert(char(10),medfacfec,103)  =  '"+fecha+"'";
            Query query = em.createNativeQuery(queryString);
            Object o = query.getSingleResult();
            System.out.println(o);
            String strnum = o.toString().substring(1, o.toString().length() - 1) ;
            System.out.println(strnum );
            num = Integer.parseInt( strnum);

            System.out.println( "Num de Registros: " + num );
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return num;
     }

   public int getNumRegistrosFacturas(String fecha){
        int num = 0;

        try {
            String queryString = "";
            queryString = "select count(id_factura) FROM  tb_totfac with (NOLOCK) " +
                    " where convert( char(10),facemifec , 103) = '"+ fecha +"'";
            Query query = em.createNativeQuery(queryString);

            Object o = query.getSingleResult();
            System.out.println(o);
            String strnum = o.toString().substring(1, o.toString().length() - 1) ;
            System.out.println(strnum );
            num = Integer.parseInt( strnum);

            System.out.println( "Num de Registros: " + num );
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return num;
    }

   public TbParametros buscarParametro(Object id) {
       return tbParametrosFacadeLocal.find(id);
   }

   public boolean seEstaEjecutandoJob( String codarea ){
       String queryString = "select * from tb_parametros with(nolock) where id_parametro = '" + codarea + "'";
       
        Boolean param9 =  false;
        try{
            List<TbParametros> lista = null;
            lista  = em.createNativeQuery( queryString, TbParametros.class )
                .getResultList();
            if(lista != null ){
                if(lista.size() > 0 ){
                    System.out.println( "Valor de param9: "  + lista.get( 0 ).getParam9().toString()  + " otro valor");
                    param9 =  lista.get( 0 ).getParam9();
                }
            }
        }catch( Exception e ){
            System.err.println( "Error--> seEstaEjecutandoJob: " + e.getMessage() );
        }
        return param9;
    }

   public TbParametros getParametro( String codParametro ){
       TbParametros tbParametros = null;
        try{
            tbParametros = tbParametrosFacadeLocal.find(codParametro);
        }catch( Exception e ){
            System.err.println( "Error--> getParametro: " + e.getMessage() );
        }
        return tbParametros;
    }

    public boolean  verificarExisteAccion( String numInscri, String cod_tipo_accion ) throws SQLException{
        boolean ban = true;
        Byte ind = 0;
        try {
            Connection cn = this.dsComercial.getConnection();
            CallableStatement cs = cn.prepareCall("{ call spExisteAccionCliente(?,?,?) }");
            cs.setString(1, numInscri);
            cs.setString(2, cod_tipo_accion);
            cs.registerOutParameter(3 , java.sql.Types.BIT );
            cs.execute();
            ind = cs.getByte(3);
            cn.close();
            cs.close();
        } catch (SQLException ex) {
            ban = false;
        }
        if( ind == 0 ){
            ban = false;
        }else{
            ban = true;
        }
        return ban;
    }

   public boolean  verificarJobEjecutando( String nom_job ) throws SQLException{
        boolean ban = true;
        Byte ind = 0;
        try {
            Connection cn = this.dsComercial.getConnection();
            CallableStatement cs = cn.prepareCall("{ call spEstaEjecutandoJob(?,?) }");
            cs.setString(1, nom_job);
            cs.registerOutParameter(2 , java.sql.Types.BIT );
            cs.execute();
            ind = cs.getByte(2);
            cn.close();
            cs.close();
        } catch (SQLException ex) {
            ban = true;
            //Logger.getLogger(RegistrarAccionDAOBean.class.getName()).log(Level.SEVERE, null, ex);
            //throw ex;
        }
        if( ind == 0 ){
            ban = false;
        }else{
            ban = true;
        }        
        return ban;
    }

   public boolean  verificarArchivoProcesadoFacturas( String fechaProceso ) throws SQLException{
        boolean ban = true;
        Byte ind = 0;
        try {
            Connection cn = this.dsComercial.getConnection();
            CallableStatement cs = cn.prepareCall("{ call spVerificarArchivoProcesadoFacturas(?,?) }");
            cs.setString(1, fechaProceso);
            cs.registerOutParameter(2 , java.sql.Types.BIT );
            cs.execute();
            ind = cs.getByte(2);
            cn.close();
            cs.close();
        } catch (SQLException ex) {
            ban = true;
            //Logger.getLogger(RegistrarAccionDAOBean.class.getName()).log(Level.SEVERE, null, ex);
            //throw ex;
        }
        if( ind == 0 ){
            ban = false;
        }else{
            ban = true;
        }
        return ban;
    }



   public boolean  verificarArchivoProcesadoLecturas( String fechaProceso ) throws SQLException{
        boolean ban = true;
        Byte ind = 0;
        try {
            Connection cn = this.dsComercial.getConnection();
            CallableStatement cs = cn.prepareCall("{ call dbo.spVerificarArchivoProcesadoLecturas(?,?) }");
            cs.setString(1, fechaProceso);
            cs.registerOutParameter(2 , java.sql.Types.BIT );
            cs.execute();
            ind = cs.getByte(2);
            cn.close();
            cs.close();
        } catch (SQLException ex) {
            ban = true;            
        }
        if( ind == 0 ){
            ban = false;
        }else{
            ban = true;
        }
        return ban;
    }

   public boolean seEstaEjecutandoJob2( String codarea ){
       String queryString = "select param9 from tb_parametros with(nolock) where id_parametro = '" + codarea + "'";       
        boolean ind =  false;
        try{
            List lista = null;
            lista  = em.createNativeQuery( queryString)
                .getResultList();
            if(lista != null ){
                if(lista.size() > 0 ){
                    List temp = (List)lista.get(0);
                    Object[] array = temp.toArray();
                    System.out.println("Valor de arreglo:    " + array[0].toString());
                    ind = Boolean.parseBoolean(array[0].toString());
                }
            }
        }catch( Exception e ){
            System.err.println( "Error--> seEstaEjecutandoJob: " + e.getMessage() );
        }
        return ind;
   }

   public List<TbTipoAccionClasificacionAccionArea> getTipoAccionByAreaIndividuales( String codArea, int codTipoAccion ){
        List<TbTipoAccionClasificacionAccionArea> lista = null;
        String queryString = "SELECT     tacaa.*" +
                " FROM         tb_TipoAccion_ClasificacionAccion_Area AS tacaa " +
                " where cod_area = '"+codArea+"' and cod_clasificacion_accion = 'I' and cod_tipo_accion = " + codTipoAccion;

        lista = em.createNativeQuery( queryString, TbTipoAccionClasificacionAccionArea.class )
                .getResultList();

        return lista;
    }

   public List<TbTipoAccionClasificacionAccionArea> getTipoAccionByAreaIndividuales( String codArea ){
        List<TbTipoAccionClasificacionAccionArea> lista = null;
        String queryString = "SELECT     tacaa.*" +
                " FROM         tb_TipoAccion_ClasificacionAccion_Area AS tacaa " +
                " where cod_area = '"+codArea+"' and cod_clasificacion_accion = 'I'";

        lista = em.createNativeQuery( queryString, TbTipoAccionClasificacionAccionArea.class )
                .getResultList();

        return lista;
    }

//   public List<TbTipoAccionClasificacionAccionAreaVerCodigo> getTipoAccionByAreaVerCodigo( String codArea ){
//        List<TbTipoAccionClasificacionAccionAreaVerCodigo> lista = null;
//        String queryString = "select tacaa.* " +
//                            "from tb_TipoAccion_ClasificacionAccion_Area tacaa " +
//                            "where cod_area = '"+ codArea +"'";
//
//        lista = em.createNativeQuery( queryString, TbTipoAccionClasificacionAccionAreaVerCodigo.class )
//                .getResultList();
//
//        return lista;
//    }

   public List<TbTipoAccionClasificacionAccionArea> getTipoAccionNotificacionesByArea( String codArea ){
        List<TbTipoAccionClasificacionAccionArea> lista = null;
        String queryString = "select tacaa.* " +
                            "from tb_TipoAccion_ClasificacionAccion_Area tacaa " +
                            "where cod_area = '"+ codArea +"' and cod_tipo_accion in ('1141','1140')";

        lista = em.createNativeQuery( queryString, TbTipoAccionClasificacionAccionArea.class )
                .getResultList();

        return lista;
    }

   public List<TbTipoAccionClasificacionAccionArea> getTipoAccionByArea( String codArea ){
        List<TbTipoAccionClasificacionAccionArea> lista = null;
        String queryString = "select tacaa.* " + 
                            "from tb_TipoAccion_ClasificacionAccion_Area tacaa " +
                            "where cod_area = '"+ codArea +"'";

        lista = em.createNativeQuery( queryString, TbTipoAccionClasificacionAccionArea.class )
                .getResultList();

        return lista;
    }

   public List<TbTipoAccionClasificacionAccionArea> getTipoAccionByArea( String codArea, int codTipoAccion ){
        List<TbTipoAccionClasificacionAccionArea> lista = null;
        String queryString = "SELECT     tacaa.*" +
                " FROM         tb_TipoAccion_ClasificacionAccion_Area AS tacaa " +
                " where cod_area = '"+codArea+"'  and cod_tipo_accion = " + codTipoAccion;

        lista = em.createNativeQuery( queryString, TbTipoAccionClasificacionAccionArea.class )
                .getResultList();

        return lista;
    }
     

    public List<TbAccion> getAccionesForCargaTrabajo( String fecha ){
        List<TbAccion> lista = null;
        String queryString = "select ta.* from tb_accion ta " +
                            "where convert( varchar(10),fecha_registro, 103 ) ='" + fecha + "'" +
                            "and fecha_envio is null";

        lista = em.createNativeQuery( queryString, TbTipoAccionClasificacionAccionArea.class )
                .getResultList();

        return lista;
    }


    public TbDatosCliente getDatosCliente( String numInscrip ){        
        TbDatosCliente obj = null;
        obj = tbDatosClienteFacadeLocal.find(numInscrip);
        return obj;
    }

    public List<TbDatosCliente> getDatosClientes( List dat ){
        List<TbDatosCliente> datos = null;
        StringBuilder strBuild = new StringBuilder("");
        for( Object o : dat ){
            List l = (List)o;
            strBuild.append("'");
            strBuild.append( l.get(0).toString() );
            strBuild.append("'");
            strBuild.append(",");
        }
        String cadena = strBuild.toString();
        cadena = cadena.substring(0, cadena.length() - 1);

        String queryString = "select * from tb_datos_cliente " +
                        "where num_inscrip in ("+ cadena +")";
        System.out.println( queryString );
        datos = em.createNativeQuery( queryString, TbDatosCliente.class )
                .getResultList();
        return datos;
    }

    @Resource(name="jdbc/Comercial")
    DataSource dsComercial;


    @PersistenceContext(unitName = "ControlAccionesComercial_EAR-ejbPU")
    private EntityManager em;

    @EJB
    TbDatosClienteFacadeLocal tbDatosClienteFacadeLocal;
    @EJB
    TbParametrosFacadeLocal tbParametrosFacadeLocal;
}
